{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from torch.utils.data import DataLoader,Dataset, Subset\n",
    "import numpy as np\n",
    "import tft_model\n",
    "from data_formatters import ts_dataset  \n",
    "import data_formatters.base\n",
    "import expt_settings.configs\n",
    "import importlib\n",
    "from data_formatters import utils\n",
    "import torch.optim as optim\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.set_option('max_columns', 1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<module 'data_formatters.utils' from '/Users/matthewsherar/Developer/Temporal Fusion Transformer/data_formatters/utils.py'>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "importlib.reload(tft_model)\n",
    "importlib.reload(utils)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "*** Training from defined parameters for electricity ***\n",
      "Loading & splitting data...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/numpy/lib/arraysetops.py:571: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n",
      "  mask |= (ar1 == a)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Formatting train-valid-test splits.\n",
      "Setting scalers with training data...\n"
     ]
    }
   ],
   "source": [
    "ExperimentConfig = expt_settings.configs.ExperimentConfig\n",
    "\n",
    "config = ExperimentConfig('electricity', 'outputs')\n",
    "data_formatter = config.make_data_formatter()\n",
    "\n",
    "\n",
    "print(\"*** Training from defined parameters for {} ***\".format('electricity'))\n",
    "data_csv_path = 'data/hourly_electricity.csv'\n",
    "print(\"Loading & splitting data...\")\n",
    "raw_data = pd.read_csv(data_csv_path, index_col=0)\n",
    "train, valid, test = data_formatter.split_data(raw_data)\n",
    "train_samples, valid_samples = data_formatter.get_num_samples_for_calibration(\n",
    ")\n",
    "\n",
    "# Sets up default params\n",
    "fixed_params = data_formatter.get_experiment_params()\n",
    "params = data_formatter.get_default_model_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "369"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(train.id.unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Getting valid sampling locations.\n",
      "Extracting 1000 samples...\n"
     ]
    }
   ],
   "source": [
    "id_col = 'categorical_id'\n",
    "time_col='hours_from_start'\n",
    "input_cols =['power_usage', 'hour', 'day_of_week', 'hours_from_start', 'categorical_id']\n",
    "target_col = 'power_usage'\n",
    "time_steps=192\n",
    "num_encoder_steps = 168\n",
    "output_size = 1\n",
    "max_samples = 1000\n",
    "input_size = 5\n",
    "\n",
    "elect = ts_dataset.TSDataset(id_col, time_col, input_cols,\n",
    "                      target_col, time_steps, max_samples,\n",
    "                     input_size, num_encoder_steps, output_size, train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size=64\n",
    "loader = DataLoader(\n",
    "            elect,\n",
    "            batch_size=batch_size,\n",
    "            num_workers=2,\n",
    "            shuffle=True\n",
    "        )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "for batch in loader:\n",
    "    break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "static_cols = ['meter']\n",
    "categorical_cols = ['hour']\n",
    "real_cols = ['power_usage','hour', 'day']\n",
    "config = {}\n",
    "config['static_variables'] = len(static_cols)\n",
    "config['time_varying_categoical_variables'] = 1\n",
    "config['time_varying_real_variables_encoder'] = 4\n",
    "config['time_varying_real_variables_decoder'] = 3\n",
    "config['num_masked_series'] = 1\n",
    "config['static_embedding_vocab_sizes'] = [369]\n",
    "config['time_varying_embedding_vocab_sizes'] = [369]\n",
    "config['embedding_dim'] = 8\n",
    "config['lstm_hidden_dimension'] = 160\n",
    "config['lstm_layers'] = 1\n",
    "config['dropout'] = 0.05\n",
    "config['device'] = 'cpu'\n",
    "config['batch_size'] = 64\n",
    "config['encode_length'] = 168\n",
    "config['attn_heads'] = 4\n",
    "config['num_quantiles'] = 3\n",
    "config['vailid_quantiles'] = [0.1,0.5,0.9]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = tft_model.TFT(config)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/matthewsherar/Developer/Temporal Fusion Transformer/tft_model.py:146: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n",
      "  sparse_weights = self.softmax(sparse_weights).unsqueeze(2)\n"
     ]
    }
   ],
   "source": [
    "output,encoder_output, decoder_output, \\\n",
    "attn,attn_output_weights, \\\n",
    "static_embedding, embeddings_encoder, embeddings_decoder = model.forward(batch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([64, 24, 3])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "output.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "q_loss_func = tft_model.QuantileLoss([0.1,0.5,0.9])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer = optim.Adam(model.parameters(), lr=0.0001)\n",
    "model.train()\n",
    "epochs=10\n",
    "losses = []\n",
    "for i in range(epochs):\n",
    "    epoch_loss = [] \n",
    "    j=0\n",
    "    for batch in loader:\n",
    "        output, encoder_ouput, decoder_output, attn, attn_weights = model(batch)\n",
    "        loss= q_loss_func(output[:,:,:].view(-1,3), batch['outputs'][:,:,0].flatten().float())\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        epoch_loss.append(loss.item())\n",
    "        j+=1\n",
    "        if j>5:\n",
    "            break\n",
    "    losses.append(np.mean(epoch_loss))\n",
    "    print(np.mean(epoch_loss))\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "output, encoder_ouput, decoder_output, attn, attn_weights = model(batch)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "56\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1c597eba8>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "ind = np.random.choice(64)\n",
    "print(ind)\n",
    "plt.plot(output[ind,:,0].detach().cpu().numpy(), label='pred_1')\n",
    "plt.plot(output[ind,:,1].detach().cpu().numpy(), label='pred_5')\n",
    "plt.plot(output[ind,:,2].detach().cpu().numpy(), label='pred_9')\n",
    "\n",
    "plt.plot(batch['outputs'][ind,:,0], label='true')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([64, 192, 192])"
      ]
     },
     "execution_count": 224,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "attn_weights.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x183a836d8>"
      ]
     },
     "execution_count": 225,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(attn_weights.detach().numpy()[0,:,:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x183ab13c8>"
      ]
     },
     "execution_count": 226,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(attn_weights.detach().numpy()[0,:,:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
